home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / OWLSRC.PAK / FINDREPL.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  254 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1992, 1997 by Borland International, All Rights Reserved
  4. //
  5. //$Revision:   10.7  $
  6. //
  7. // Implementation of abstract class TFindReplaceDialog, and leaf classes
  8. // TFindDialog and TReplaceDialog that encapsulate Common Dialogs
  9. //----------------------------------------------------------------------------
  10. #pragma hdrignore SECTION
  11. #include <owl/pch.h>
  12. #if !defined(OWL_FINDREPL_H)
  13. # include <owl/findrepl.h>
  14. #endif
  15. #if !defined(ctlFirst)
  16. # include <dlgs.h>
  17. #endif
  18.  
  19. OWL_DIAGINFO;
  20.  
  21. #if !defined(SECTION) || SECTION == 1
  22.  
  23. //
  24. //
  25. //
  26. TFindReplaceDialog::TData::TData(uint32 flags, int buffSize)
  27. :
  28.   Flags(flags), BuffSize(buffSize), Error(0)
  29. {
  30.   FindWhat = new char[BuffSize];
  31.   ReplaceWith = new char[BuffSize];
  32.   *FindWhat = *ReplaceWith = 0;
  33. }
  34.  
  35. //
  36. //
  37. //
  38. TFindReplaceDialog::TData::TData(const TData& src)
  39. :
  40.   Flags(src.Flags),
  41.   BuffSize(src.BuffSize),
  42.   Error(0)
  43. {
  44.   FindWhat = strnewdup(src.FindWhat, BuffSize);
  45.   ReplaceWith = strnewdup(src.ReplaceWith, BuffSize);
  46. }
  47.  
  48.  
  49. //
  50. //
  51. //
  52. TFindReplaceDialog::TData::~TData()
  53. {
  54.   delete[] FindWhat;
  55.   delete[] ReplaceWith;
  56. }
  57.  
  58. //
  59. //
  60. //
  61. TFindReplaceDialog::TData&
  62. TFindReplaceDialog::TData::operator =(const TData& src)
  63. {
  64.   Flags = src.Flags;
  65.   BuffSize = src.BuffSize;
  66.   Error = 0;
  67.  
  68.   delete[] FindWhat;
  69.   FindWhat = strnewdup(src.FindWhat, BuffSize);
  70.  
  71.   delete[] ReplaceWith;
  72.   ReplaceWith = strnewdup(src.ReplaceWith, BuffSize);
  73.  
  74.   return *this;
  75. }
  76.  
  77.  
  78. //----------------------------------------------------------------------------
  79.  
  80. DEFINE_RESPONSE_TABLE1(TFindReplaceDialog, TCommonDialog)
  81.   EV_WM_NCDESTROY,
  82. END_RESPONSE_TABLE;
  83.  
  84. IMPLEMENT_CASTABLE(TFindReplaceDialog);
  85.  
  86. //
  87. //
  88. //
  89. void
  90. TFindReplaceDialog::Init(TResId templateId)
  91. {
  92.   memset(&fr, 0, sizeof(FINDREPLACE));
  93.   fr.lStructSize = sizeof(FINDREPLACE);
  94.   fr.hwndOwner = Parent ? Parent->GetHandle() : 0;
  95.   fr.hInstance = *GetModule();
  96.   Data.Flags &= ~(FR_FINDNEXT|FR_REPLACE|FR_REPLACEALL|FR_DIALOGTERM);
  97.   fr.Flags = FR_ENABLEHOOK | Data.Flags;
  98.   if (templateId) {
  99.     fr.lpTemplateName = templateId;
  100.     fr.Flags |= FR_ENABLETEMPLATE;
  101.   }
  102.   else
  103.     fr.Flags &= ~FR_ENABLETEMPLATE;
  104.  
  105.   fr.lpstrFindWhat = Data.FindWhat;
  106.   fr.wFindWhatLen = (uint16)Data.BuffSize;
  107.   fr.lpstrReplaceWith = Data.ReplaceWith;
  108.   fr.wReplaceWithLen = (uint16)Data.BuffSize;
  109. }
  110.  
  111. //
  112. //
  113. //
  114. TFindReplaceDialog::TFindReplaceDialog(TWindow*        parent,
  115.                                        TData&          data,
  116.                                        TResId          templateId,
  117.                                        const char far* title,
  118.                                        TModule*        module)
  119. :
  120.   TCommonDialog(parent, title, module),
  121.   Data(data)
  122. {
  123.   Init(templateId);
  124. }
  125.  
  126. //
  127. //
  128. //
  129. TWindow::THandle
  130. TFindReplaceDialog::DoCreate()
  131. {
  132.   return 0;
  133. }
  134.  
  135. //
  136. //
  137. //
  138. bool
  139. TFindReplaceDialog::DialogFunction(uint msg, TParam1 param1, TParam2 param2)
  140. {
  141.   return TCommonDialog::DialogFunction(msg, param1, param2);
  142. }
  143.  
  144. //
  145. // Make sure flags get copied over before we go
  146. //
  147. void
  148. TFindReplaceDialog::EvNCDestroy()
  149. {
  150.   Data.Flags = fr.Flags;
  151.   TWindow::EvNCDestroy();
  152. }
  153.  
  154. //
  155. // Update the flags from the passed-in parameter.
  156. // Assumes the parameters is a pointer to a FINDREPLACE structure.
  157. //
  158. void
  159. TFindReplaceDialog::UpdateData(TParam2 param2)
  160. {
  161.   if (param2)
  162.     Data.Flags = ((LPFINDREPLACE)param2)->Flags;
  163.   else
  164.     Data.Flags = fr.Flags;
  165. }
  166.  
  167. //----------------------------------------------------------------------------
  168.  
  169. IMPLEMENT_CASTABLE(TFindDialog);
  170.  
  171. //
  172. //
  173. //
  174. TFindDialog::TFindDialog(TWindow*        parent,
  175.                          TData&          data,
  176.                          TResId          templateId,
  177.                          const char far* title,
  178.                          TModule*        module)
  179. :
  180.   TFindReplaceDialog(parent, data, templateId, title, module)
  181. {
  182. }
  183.  
  184. //
  185. //
  186. //
  187. TWindow::THandle
  188. TFindDialog::DoCreate()
  189. {
  190.   fr.lpfnHook = LPFRHOOKPROC(StdDlgProc);
  191.   return ::FindText(&fr);
  192. }
  193.  
  194. //----------------------------------------------------------------------------
  195.  
  196. IMPLEMENT_CASTABLE(TReplaceDialog);
  197.  
  198. //
  199. //
  200. //
  201. TReplaceDialog::TReplaceDialog(TWindow*        parent,
  202.                                TData&          data,
  203.                                TResId          templateId,
  204.                                const char far* title,
  205.                                TModule*        module)
  206. :
  207.   TFindReplaceDialog(parent, data, templateId, title, module)
  208. {
  209. }
  210.  
  211. //
  212. //
  213. //
  214. TWindow::THandle
  215. TReplaceDialog::DoCreate()
  216. {
  217.   fr.lpfnHook = LPFRHOOKPROC(StdDlgProc);
  218.   return ::ReplaceText(&fr);
  219. }
  220.  
  221. #endif
  222. #if !defined(SECTION) || SECTION == 2
  223. //Keep streaming out if not used
  224.  
  225. //
  226. //
  227. //
  228. void
  229. TFindReplaceDialog::TData::Read(ipstream& is)
  230. {
  231.   is >> Flags;
  232.   is >> BuffSize;
  233.   delete[] FindWhat;
  234.   delete[] ReplaceWith;
  235.   FindWhat = new char[BuffSize];
  236.   ReplaceWith = new char[BuffSize];
  237.   is.readBytes(FindWhat, BuffSize);
  238.   is.readBytes(ReplaceWith, BuffSize);
  239. }
  240.  
  241. //
  242. //
  243. //
  244. void
  245. TFindReplaceDialog::TData::Write(opstream& os)
  246. {
  247.   os << Flags;
  248.   os << BuffSize;
  249.   os.writeBytes(FindWhat, BuffSize);
  250.   os.writeBytes(ReplaceWith, BuffSize);
  251. }
  252.  
  253. #endif
  254.